class AppController < ApplicationController

  before_filter :authorize_user, :except => ['login', 'register']
  before_filter :authorize_admin, :only => :register

  def initialize

    @Days = {
      1 => "Mon",
      2 => "Tue",
      3 => "Wed",
      4 => "Thu",
      5 => "Fri"
    }

    @Dias = ["Lunes", "Martes", "Miercoles", "Jueves", "Viernes"]
  end

  # guardamos:
  # username, user_id, type, humanname
  # en session para reusarlos
  def login
    if session[:username] # el usuario quiere abrir sesión cuando ya tiene
      flash[:notice] = "Cierra primero tu sesión antes de abrir otra"
      return
    end
    if request.post? # el usuario manda sus datos
      session[:username] = nil
      session[:type] = nil
      if Alumno.find_by_username(params[:record][:username])
        user = Alumno.authenticate(params[:record][:username], params[:record][:clave])
        user_type = 'alumno'
      elsif Profesor.find_by_username(params[:record][:username])
        user = Profesor.authenticate(params[:record][:username], params[:record][:clave])
        user_type = 'profesor'
      else # el nombre de usuario no existe
        flash[:notice] = "El usuario \"#{params[:record][:username]}\" no existe"
        return
      end
      if user
        session[:username] = user.username
        session[:user_id] = user.id
        # es un administrador
        if user.username == 'admin'
          session[:type] = 'admin'
          session[:humanname] = 'Administrador'
          redirect_to(:action => "register")
          # es un profesor o alumno
        else
          session[:type] = user_type
          session[:humanname] = user.human_name
          redirect_to(:action => "list_citas")
        end
      else
        flash[:notice] = "La combinación clave-usuario es incorrecta"
      end
    end
  end

  def logout
    session[:username] = nil
    session[:type] = nil
  end

  ### Registro

  def register
    #flash[:notice] = nil
  end

  def create_user
    if $user_type == 'alumno'
      @record = Alumno.new(params[:record])
    elsif $user_type == 'profesor'
      @record = Profesor.new(params[:record])
    end
    if @record.save
      flash[:notice] = "El usuario fue creado"
      redirect_to :action => 'register'
    else
      render :update do |page|
        page["reporte_error"].replace_html :partial => "errores"
        page["escondido"].visual_effect :blind_down, :duration => 3
      end
    end
  end

  def show_form
    @form = params[:user_type]
    $user_type = @form
    #redirect_to :action => 'register'
  end

  ### Mis Citas

  def list_citas
    if session[:type] == 'profesor' 
      @opposite_user = 'alumno'
      type_id = 'profesor_id'
    else
      @opposite_user = 'profesor'
      type_id = 'alumno_id'
    end
    @pages, @collection = paginate :citas,
      :conditions => ["#{type_id} = ?", session[:user_id]],
      :per_page => 10
  end

  def show_cita
    @record = Cita.find(params[:id])
  end

  def cancel_cita
    cita = Cita.find(params[:id])
    cita.estado= "Cancelada"
    cita.update
    flash[:notice] = "La cita fue cancelada"
    redirect_to :action => 'list_citas'
  end


  ### Editar Perfil
  
  def show_perfil
    if session[:type] == 'alumno'
      @partial = 'alumno_perfil'
      @record = Alumno.find session[:user_id]
    elsif session[:type] == 'profesor'
      @partial = 'profesor_perfil'
      @record = Profesor.find session[:user_id]
    end

  end

  def update_perfil
    if session[:type] == 'alumno'
      alumno = Alumno.find(params[:id])
      alumno.update_attributes(params[:record])
      flash[:notice] = "Tu perfil fue modificado"
      redirect_to :action => 'show_perfil'
    elsif session[:type] == 'profesor'
      profesor = Profesor.find(params[:id])
      profesor.update_attributes(params[:record])
      flash[:notice] = "Tu perfil fue modificado"
      redirect_to :action => 'show_perfil', :id => profesor.id

    end
  end


  ### Mi Horario

  def show_horario
    horario = Horario.find_by_profesor_id(session[:user_id]).horas
    tw = TimeWindow.new(horario)
    @time_window = tw.rules
  end

  def new_regla

  end

  def add_regla
    horario = Horario.find_by_profesor_id(session[:user_id])
    new_rule = ""
    @Dias.each do |dia|
      day = @Days[params[:checkbox][dia].to_i]
      new_rule += if day then day + " " else "" end
    end

    new_rule += "#{params[:date][:from_hour]}#{params[:date][:from_minutes]}-"
    new_rule += "#{params[:date][:to_hour]}#{params[:date][:to_minutes]}"
    horario.horas= horario.horas + " " + new_rule + ";"
    horario.update
    render :action => 'show_horario'
  end

  def delete_regla
    rule = params[:rule]
    horario = Horario.find_by_profesor_id(session[:user_id])
    horario.horas= horario.horas.sub(rule[:rule]+";", "")
    horario.update
    redirect_to :action => 'show_horario'
  end
end
